﻿// -----------------------------------------------------------------------
// <copyright file="NhomNganhNgheData.cs" company="VDC" author="LongLC">
// Class NhomNganhNgheData
// </copyright>
// -----------------------------------------------------------------------

namespace VDC.VONE.DAL
{
    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.Reflection;
    using Microsoft.ApplicationBlocks.Data;
    using VDC.COMMON;
    using VDC.VONE.ENTITY;

    /// <summary>
    ///     Class NhomNganhNgheData.cs
    /// </summary>
    public class NhomNganhNgheData
    {
        /// <summary>
        /// Lấy nhóm ngành nghề theo id từ DB.
        /// </summary>
        /// <param name="idNhomNganhNghe">The id nhom nganh nghe.</param>
        /// <returns>return NhomNganhNghe</returns>
        public NhomNganhNghe GetNhomNganhNgheById(int idNhomNganhNghe)
        {
            string methodName = MethodBase.GetCurrentMethod().DeclaringType.ToString();

            LogHelper.Instance.WriteInfo(Constants.Begin + methodName);
            try
            {
                NhomNganhNghe nhomNganhNghe = null;

                var reader = SqlHelper.ExecuteReader(SqlHelper.ConnectionString, Constants.StorepProcedure.VOneNhomNganhNgheGetById, idNhomNganhNghe.ToString());
                while (reader.Read())
                {
                    nhomNganhNghe = new NhomNganhNghe();
                    if (!reader.IsDBNull(0))
                    {
                        nhomNganhNghe.IdNhomNganh = reader.GetInt32(0);
                    }

                    if (reader.GetString(1) != null)
                    {
                        nhomNganhNghe.MaNhomNganh = reader.GetString(1);
                    }

                    if (reader.GetString(2) != null)
                    {
                        nhomNganhNghe.TenNhomNganh = reader.GetString(2);
                    }
                }

                reader.Close();
                reader.Dispose();

                LogHelper.Instance.WriteInfo(Constants.End + methodName);

                return nhomNganhNghe;
            }
            catch (SqlException ex)
            {
                LogHelper.Instance.WriteError(methodName + Constants.Colon + ex.Message);
                throw;
            }
        }

        /// <summary>
        /// Lấy tất cả nhóm ngành nghề từ DB.
        /// </summary>
        /// <returns>return List</returns>
        public IList<NhomNganhNghe> GetNhomNganhNghe()
        {
            string methodName = MethodBase.GetCurrentMethod().DeclaringType.ToString();
            LogHelper.Instance.WriteInfo(Constants.Begin + methodName);
            try
            {
                IList<NhomNganhNghe> listNhomNganhNghe = new List<NhomNganhNghe>();
                NhomNganhNghe nhomNganhNghe;
                SqlDataReader reader = SqlHelper.ExecuteReader(SqlHelper.ConnectionString, Constants.StorepProcedure.VOneNhomNganhNgheGet);
                while (reader.Read())
                {
                    nhomNganhNghe = new NhomNganhNghe();
                    if (!reader.IsDBNull(0))
                    {
                        nhomNganhNghe.IdNhomNganh = reader.GetInt32(0);
                    }

                    if (reader.GetString(1) != null)
                    {
                        nhomNganhNghe.MaNhomNganh = reader.GetString(1);
                    }

                    if (reader.GetString(2) != null)
                    {
                        nhomNganhNghe.TenNhomNganh = reader.GetString(2);
                    }

                    listNhomNganhNghe.Add(nhomNganhNghe);
                }

                reader.Close();
                reader.Dispose();

                LogHelper.Instance.WriteInfo(Constants.End + methodName);
                return listNhomNganhNghe;
            }
            catch (SqlException ex)
            {
                LogHelper.Instance.WriteError(methodName + Constants.Colon + ex.Message);
                throw;
            }
        }

        /// <summary>
        /// Chèn một ngành nghề vào DB.
        /// </summary>
        /// <param name="nhomNganhNghe">The nhom nganh nghe.</param>
        /// <returns>return int</returns>
        public int Insert(NhomNganhNghe nhomNganhNghe)
        {
            string methodName = MethodBase.GetCurrentMethod().DeclaringType.ToString();
            LogHelper.Instance.WriteInfo(Constants.Begin + methodName);
            try
            {
                var sqlParams = new SqlParameter[]
                {
                    new SqlParameter(Constants.SqlParamerterName.MaNhomNganh, nhomNganhNghe.MaNhomNganh),
                    new SqlParameter(Constants.SqlParamerterName.TenNhomNganh, nhomNganhNghe.TenNhomNganh),
                };
                var result = Convert.ToInt32(SqlHelper.ExecuteScalar(SqlHelper.ConnectionString, Constants.StorepProcedure.VOneNhomNganhNgheInsert, sqlParams));
                LogHelper.Instance.WriteInfo(Constants.End + methodName);
                return result;
            }
            catch (SqlException ex)
            {
                LogHelper.Instance.WriteError(methodName + Constants.Colon + ex.Message);
                throw;
            }
        }

        /// <summary>
        /// Cập nhập nhóm ngành nghề trong DB.
        /// </summary>
        /// <param name="nhomNganhNghe">The nhom nganh nghe.</param>
        public void Update(NhomNganhNghe nhomNganhNghe)
        {
            string methodName = MethodBase.GetCurrentMethod().DeclaringType.ToString();

            LogHelper.Instance.WriteInfo(Constants.Begin + methodName);
            try
            {
                var sqlParams = new SqlParameter[]
                    {
                        new SqlParameter(Constants.SqlParamerterName.IdNhomNganh, nhomNganhNghe.IdNhomNganh),
                        new SqlParameter(Constants.SqlParamerterName.MaNhomNganh, nhomNganhNghe.MaNhomNganh),
                        new SqlParameter(Constants.SqlParamerterName.TenNhomNganh, nhomNganhNghe.TenNhomNganh),
                    };
                SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionString, Constants.StorepProcedure.VOneNhomNganhNgheUpdate, sqlParams);
                LogHelper.Instance.WriteError(Constants.End + methodName);
            }
            catch (SqlException ex)
            {
                LogHelper.Instance.WriteInfo(methodName + Constants.Colon + ex.Message);
                throw;
            }
        }

        /// <summary>
        /// Xóa nhóm ngành nghề trong DB.
        /// </summary>
        /// <param name="idNhomNganhNghe">The id nhom nganh nghe.</param>
        public void Delete(int idNhomNganhNghe)
        {
            string methodName = MethodBase.GetCurrentMethod().DeclaringType.ToString();

            LogHelper.Instance.WriteInfo(Constants.Begin + methodName);
            try
            {
                var sqlParams = new SqlParameter[] { new SqlParameter(Constants.SqlParamerterName.IdNhomNganh, idNhomNganhNghe) };
                SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionString, Constants.StorepProcedure.VOneNhomNganhNgheDelete, sqlParams);
                LogHelper.Instance.WriteInfo(Constants.End + methodName);
            }
            catch (SqlException ex)
            {
                LogHelper.Instance.WriteError(methodName + Constants.Colon + ex.Message);
                throw;
            }
        }
    }
}